//
//  RigaDettaglioEditVC.m
//  iTeVe
//
//  Created by Pedro Gonzalez on 04/03/14.
//  Copyright (c) 2014 SISI Software. All rights reserved.
//

#import "RigaDettaglioEditVC.h"

@interface RigaDettaglioEditVC () <UITextFieldDelegate>

@end

@implementation RigaDettaglioEditVC{
    
    UIPopoverController *sceltaArticoloPopover;
    Aliquota *aliquota;
    NSNumberFormatter *numberFormatter;
    NSNumberFormatter *numberFormatter3;
    NSLocale* locale;
    NSString *separatore;

}

@synthesize modelRiga, modelTesta, modelArticolo;

@synthesize btnAnnulla, btnConferma;
@synthesize sceltaArticolo;
@synthesize lblQuantita, lblPrezzo, lblPrezzoIvato, lblUnitaDiMisura, lblAliquota, lblPercentuale, lblSconti,  lblTotali, lblTotaliIvato;
@synthesize tfCodiceArticolo, tfDescrizioneArticolo, tfQuantita, tfUnitaDiMisura, tfAliquota, tfPercentualeAli, tfPrezzo, tfPrezzoIvato, tfSc1, tfSc2, tfSc3, tfSc4, tfTotali, tfTotaliIvato;

- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    numberFormatter = [[NSNumberFormatter alloc] init];
    [numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
    [numberFormatter setLenient:YES];
    [numberFormatter setNegativeFormat:@"(0.00)"];
    [numberFormatter setPositiveFormat:@"0.00"];
    
    numberFormatter3 = [[NSNumberFormatter alloc] init];
    [numberFormatter3 setNumberStyle:NSNumberFormatterDecimalStyle];
    [numberFormatter3 setLenient:YES];
    [numberFormatter3 setNegativeFormat:@"(0.000)"];
    [numberFormatter3 setPositiveFormat:@"0.000"];
   
    locale = [NSLocale currentLocale];
    separatore = [locale objectForKey: NSLocaleDecimalSeparator];

    
    if (modelRiga.nuovo){
        
    } else {
        
    }
    
    tfCodiceArticolo.text = modelRiga.codart;
    tfDescrizioneArticolo.text = modelRiga.descrizione;
    
    FMDBDataAccess *db = [[FMDBDataAccess alloc] init];
    Articolo *articolo = [db getArticoloxCodice:tfCodiceArticolo.text];
    modelArticolo = articolo;

    
    tfCodiceArticolo.enabled = NO;
    tfDescrizioneArticolo.enabled = NO;
    
    tfQuantita.delegate = self;
    tfPrezzo.delegate = self;
    tfSc1.delegate = self;
    tfSc2.delegate = self;
    tfSc3.delegate = self;
    tfSc4.delegate = self;
    
    tfQuantita.text = [numberFormatter3 stringFromNumber:modelRiga.quantita];
    tfUnitaDiMisura.text = modelRiga.unmisura;
    tfPrezzo.text = [numberFormatter stringFromNumber:modelRiga.prezzo];
    
    aliquota = [db getAliquotaxCodice:modelRiga.codali];
    [self visualizzoAliquotaIva:aliquota];

    double prezzoivato = [modelRiga.prezzo doubleValue];
    prezzoivato = prezzoivato + prezzoivato * [aliquota.percentuale doubleValue] / 100;
    tfPrezzoIvato.text = [numberFormatter stringFromNumber:[NSNumber numberWithDouble:prezzoivato]];

    tfSc1.text = [numberFormatter stringFromNumber:modelRiga.sc1];
    tfSc2.text = [numberFormatter stringFromNumber:modelRiga.sc2];
    tfSc3.text = [numberFormatter stringFromNumber:modelRiga.sc3];
    tfSc4.text = [numberFormatter stringFromNumber:modelRiga.sc4];
    tfUnitaDiMisura.text = modelRiga.unmisura;
    tfTotali.text = [numberFormatter stringFromNumber:modelRiga.totimponibile];
    tfTotaliIvato.text = [numberFormatter stringFromNumber:modelRiga.totaleivato];
    
    
    // per fare il calcolo subito quando modificata la quantita, prezzo, sconti...
    /*
    [tfQuantita addTarget:self action:@selector(calcoloTotale:) forControlEvents:UIControlEventEditingChanged];
    [tfPrezzo addTarget:self action:@selector(calcoloTotale:) forControlEvents:UIControlEventEditingChanged];
    [tfSc1 addTarget:self action:@selector(calcoloTotale:) forControlEvents:UIControlEventEditingChanged];
    [tfSc2 addTarget:self action:@selector(calcoloTotale:) forControlEvents:UIControlEventEditingChanged];
    [tfSc3 addTarget:self action:@selector(calcoloTotale:) forControlEvents:UIControlEventEditingChanged];
    [tfSc4 addTarget:self action:@selector(calcoloTotale:) forControlEvents:UIControlEventEditingChanged];
     */

    // per formattare tutti i campi alla fine del edizione
    [tfQuantita addTarget:self action:@selector(calcoloTotale:) forControlEvents:UIControlEventEditingDidEnd];
    [tfPrezzo addTarget:self action:@selector(calcoloTotale:) forControlEvents:UIControlEventEditingDidEnd];
    [tfPrezzoIvato addTarget:self action:@selector(calcoloTotale:) forControlEvents:UIControlEventEditingDidEnd];
    [tfSc1 addTarget:self action:@selector(calcoloTotale:) forControlEvents:UIControlEventEditingDidEnd];
    [tfSc2 addTarget:self action:@selector(calcoloTotale:) forControlEvents:UIControlEventEditingDidEnd];
    [tfSc3 addTarget:self action:@selector(calcoloTotale:) forControlEvents:UIControlEventEditingDidEnd];
    [tfSc4 addTarget:self action:@selector(calcoloTotale:) forControlEvents:UIControlEventEditingDidEnd];
    
    // calcolo tutta la schermata
    [self calcoloTotale:tfPrezzo];
    
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}


- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    if (textField == self.tfSc1 || textField == self.tfSc2 || textField == self.tfSc3 || textField == self.tfSc4 || textField == self.tfQuantita || textField == self.tfPrezzo )
    {
        NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
                
        NSString *expression = [NSString stringWithFormat:@"%@%@%@", @"^([0-9]+)?(\\", separatore, @"([0-9]{1,2})?)?$"];
        
        NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:expression
                                                                               options:NSRegularExpressionCaseInsensitive
                                                                                 error:nil];
        NSUInteger numberOfMatches = [regex numberOfMatchesInString:newString
                                                            options:0
                                                              range:NSMakeRange(0, [newString length])];
        if (numberOfMatches == 0)
            return NO;
    }
    
    return YES;
}



- (void) calcoloTotale :(UITextField *)textField
{

    double _qta, _prezzo, _sc1, _sc2, _sc3, _sc4, _totaleimponibile, _totaleivato = 0.0;
    
    // NOTA: trasformiamo i valori numerici con il PUNTO prima della virgola
    // se usiamo la configurazione europea il separatore è la VIRGOLA
    
    _qta = [[tfQuantita.text stringByReplacingOccurrencesOfString:separatore withString:@"."] doubleValue];
    if (textField == self.tfPrezzoIvato){
        _prezzo = [[tfPrezzoIvato.text stringByReplacingOccurrencesOfString:separatore withString:@"."] doubleValue];
        _prezzo = _prezzo / ( 1 + ([aliquota.percentuale doubleValue] / 100) );
    } else {
        _prezzo = [[tfPrezzo.text stringByReplacingOccurrencesOfString:separatore withString:@"."] doubleValue];
    }
    
    _sc1 = [[tfSc1.text stringByReplacingOccurrencesOfString:separatore withString:@"."] doubleValue];
    _sc2 = [[tfSc2.text stringByReplacingOccurrencesOfString:separatore withString:@"."] doubleValue];
    _sc3 = [[tfSc3.text stringByReplacingOccurrencesOfString:separatore withString:@"."] doubleValue];
    _sc4 = [[tfSc4.text stringByReplacingOccurrencesOfString:separatore withString:@"."] doubleValue];
    
    _totaleimponibile = _qta * _prezzo;
    _totaleimponibile = _totaleimponibile - _totaleimponibile * _sc1 / 100;
    _totaleimponibile = _totaleimponibile - _totaleimponibile * _sc2 / 100;
    _totaleimponibile = _totaleimponibile - _totaleimponibile * _sc3 / 100;
    _totaleimponibile = _totaleimponibile - _totaleimponibile * _sc4 / 100;
    
    
    if (tfCodiceArticolo.text.length>0 && modelArticolo!=NULL){
        _totaleivato = _totaleimponibile + _totaleimponibile * [aliquota.percentuale doubleValue] / 100;
    }
    
    double prezzoivato = _prezzo + _prezzo * [aliquota.percentuale doubleValue] / 100;
    tfPrezzoIvato.text = [numberFormatter stringFromNumber:[NSNumber numberWithDouble:prezzoivato]];
    
    tfQuantita.text = [numberFormatter3 stringFromNumber:[NSNumber numberWithDouble:_qta]];
    tfPrezzo.text = [numberFormatter stringFromNumber:[NSNumber numberWithDouble:_prezzo]];
    tfSc1.text = [numberFormatter stringFromNumber:[NSNumber numberWithDouble:_sc1]];
    tfSc2.text = [numberFormatter stringFromNumber:[NSNumber numberWithDouble:_sc2]];
    tfSc3.text = [numberFormatter stringFromNumber:[NSNumber numberWithDouble:_sc3]];
    tfSc4.text = [numberFormatter stringFromNumber:[NSNumber numberWithDouble:_sc4]];
    tfTotali.text = [numberFormatter stringFromNumber:[NSNumber numberWithDouble:_totaleimponibile]];
    tfTotaliIvato.text = [numberFormatter stringFromNumber:[NSNumber numberWithDouble:_totaleivato]];
    
}


- (void) formattoCampiNumerici
{
    
    // imposto due o tre decimali nella visualizzazione x tutti i campi numerici
    
    double _qta, _prezzo, _sc1, _sc2, _sc3, _sc4, _totaleivato;
    _qta = [tfQuantita.text doubleValue];
    _prezzo = [tfPrezzo.text doubleValue];
    _sc1 = [tfSc1.text doubleValue];
    _sc2 = [tfSc2.text doubleValue];
    _sc3 = [tfSc3.text doubleValue];
    _sc4 = [tfSc4.text doubleValue];
    _totaleivato = [tfTotali.text doubleValue];

    tfQuantita.text = [numberFormatter3 stringFromNumber:[NSNumber numberWithDouble:_qta]];
    tfPrezzo.text = [numberFormatter stringFromNumber:[NSNumber numberWithDouble:_prezzo]];
    tfSc1.text = [numberFormatter stringFromNumber:[NSNumber numberWithDouble:_sc1]];
    tfSc2.text = [numberFormatter stringFromNumber:[NSNumber numberWithDouble:_sc2]];
    tfSc3.text = [numberFormatter stringFromNumber:[NSNumber numberWithDouble:_sc3]];
    tfSc4.text = [numberFormatter stringFromNumber:[NSNumber numberWithDouble:_sc4]];
    tfTotali.text = [numberFormatter stringFromNumber:[NSNumber numberWithDouble:_totaleivato]];

}


- (void)selectItemViewController:(ArticoliScegliVC *)controller didFinishEnteringItem:(Articolo *)articolo
{
    
    tfCodiceArticolo.text = articolo.codart;
    tfDescrizioneArticolo.text = articolo.descrizione;
    tfUnitaDiMisura.text = articolo.unmisura;

    // devo cercare prezzo associato, d'accordo al listino
    NSString *codiceListino = modelTesta.datiCliente.codlistino;
    if (codiceListino.length==0){
        codiceListino = @"LI1"; // TODO: indicare un listino x default da qualche parte nella configurazione
    }
    
    FMDBDataAccess *db = [[FMDBDataAccess alloc] init];
    aliquota = [db getAliquotaxCodice:articolo.codali];
    [self visualizzoAliquotaIva:aliquota];
    ListinoArticolo *listinoArt = [db getListinoArticoloxCodice:codiceListino codiceArticolo:articolo.codart];

    if (listinoArt.id==0){
        tfPrezzo.text = [numberFormatter stringFromNumber:0];
    } else {
        NSNumber *prezzo = listinoArt.prezzo;
        double prezzo2 = [prezzo doubleValue];
        Listino *listino = [db getListinoxCodice:modelTesta.datiCliente.codlistino];
        if (listino.ivato){
            // tolgo iva e faccio vedere l'imponibile
            prezzo2 = prezzo2 / ( 1 + ([aliquota.percentuale doubleValue] / 100) );
            prezzo = [NSNumber numberWithDouble:prezzo2];
        }
        tfPrezzo.text = [numberFormatter stringFromNumber:prezzo];
    }

    tfPercentualeAli.text = [numberFormatter stringFromNumber:aliquota.percentuale];
    
    modelArticolo = articolo;
    
    [self calcoloTotale:tfPrezzo];
    
    
    [sceltaArticoloPopover dismissPopoverAnimated:YES];
    sceltaArticoloPopover = nil;
    
}

-(void)visualizzoAliquotaIva:(Aliquota *)aliquotaIva
{
    tfAliquota.text = [NSString stringWithFormat:@"%@ - %@", aliquotaIva.codali, aliquotaIva.descrizione];
    tfPercentualeAli.text = [numberFormatter stringFromNumber:aliquotaIva.percentuale];
}

-(void)prepareForSegue:(UIStoryboardPopoverSegue *)segue sender:(id)sender{
    
    if([segue.identifier isEqualToString:@"sceltaArticoloSegue"] || [segue.identifier isEqualToString:@"sceltaArticoloSegue2"]){
        sceltaArticoloPopover = [(UIStoryboardPopoverSegue *)segue popoverController];
        sceltaArticoloPopover.delegate = (id <UIPopoverControllerDelegate>)self;
        ArticoliScegliVC *controller = (ArticoliScegliVC *)segue.destinationViewController;
        controller.delegate = self;
        controller.isScelgoArticolo = YES;
    }
}

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender {
    if (sceltaArticoloPopover){
        [sceltaArticoloPopover dismissPopoverAnimated:YES];
        sceltaArticoloPopover = nil;
        return NO;
    } else {
        return YES;
    }
}



- (IBAction)btnAnnulla:(id)sender {
        [self.delegate rigaDettaglioEditVCDidCancel:self];
}

- (IBAction)btnConferma:(id)sender {
    modelRiga.codart = tfCodiceArticolo.text;
    modelRiga.descrizione = tfDescrizioneArticolo.text;
    modelRiga.unmisura = tfUnitaDiMisura.text;
    modelRiga.codali = aliquota.codali;
    
    NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
    [f setNumberStyle:NSNumberFormatterDecimalStyle];
    [f setLenient:YES];
    
    modelRiga.quantita = [f numberFromString:tfQuantita.text];
    modelRiga.prezzo = [f numberFromString:tfPrezzo.text];
    modelRiga.sc1 = [f numberFromString:tfSc1.text];
    modelRiga.sc2 = [f numberFromString:tfSc2.text];
    modelRiga.sc3 = [f numberFromString:tfSc3.text];
    modelRiga.sc4 = [f numberFromString:tfSc4.text];
    modelRiga.totimponibile = [f numberFromString:tfTotali.text];
    modelRiga.totaleivato = [f numberFromString:tfTotaliIvato.text];
    
    double totiva = [modelRiga.totaleivato doubleValue] - [modelRiga.totimponibile doubleValue];
    modelRiga.totiva = [NSNumber numberWithDouble:totiva];
    
    [self.delegate rigaDettaglioEditVC:self didEditRiga:modelRiga];
}


@end
